Mybatis查询用户权限之通过association、collection一次性查出树形结构 |
您所在的位置:网站首页 › mybatis-plus 树形结构 查询 › Mybatis查询用户权限之通过association、collection一次性查出树形结构 |
前言
现在项目中一直在用Mybatis Plus框架,其中已经封装好了大部分的CRUD代码,还有很方便的条件构造器。虽然只是针对的单表操作,但也习惯了在Java代码中遍历组装数据,其实通过mybatis可以一次性、按结构查出我们需要的数据来的,下面来看看怎么做吧。 在项目中,某些实体类之间肯定有关键关系,比如一对一,一对多等。在hibernate 中用one to one和one to many,而mybatis 中就用association和collection。 association: 一对一关联(has one) collection:一对多关联(has many) 注意,只有在做select查询时才会用到这两个标签。 已知数据库资源表数据结构如下: 每个主菜单下,包含了多级子菜单,通过parentId关联,这样就构成了一个树形结构。这也是大部分项目中默认架构设计。 比如同时有Menu.java和Meta.java两个类 资源表实体Menu如下: package com.junya.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableField; import com.junya.entity.domain.Meta; import lombok.Data; import org.apache.catalina.LifecycleState; import java.io.Serializable; import java.util.List; /** ** 权限资源表实体类 * * * @author zhangchao * @since 2020-05-21 */ @Data @TableName("menu") public class Menu extends Model { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Integer id; @TableField("url") private String url; @TableField("path") private String path; @TableField("component") private String component; @TableField("name") private String name; @TableField("iconCls") private String iconCls; @TableField("parentId") private Integer parentId; @TableField("enabled") private Boolean enabled; @TableField(exist = false) private Meta meta; @TableField(exist = false) private List children; }children集合是存放此菜单下的所有子菜单数据。 Meta类里表示此资源的两个属性:是否存活、是否需要权限访问,如下: package com.junya.entity.domain; import lombok.Data; /** * @author ZHANGCHAO * @date 2020/5/22 10:54 * @since 1.0.0 */ @Data public class Meta { private Boolean keepAlive; private Boolean requireAuth; }在映射Meta属性时用association标签, 映射children时用collection标签. 所以association是用于一对一和多对一,而collection是用于一对多的关系 MeunMapper.xml如下: id, url, path, component, name, iconCls, keepAlive, requireAuth, parentId, enabled SELECT DISTINCT m1.* , m2.id id2, m2.component component2, m2.enabled enabled2, m2.iconCls iconCls2, m2.keepAlive keepAlive2, m2.requireAuth requireAuth2, m2.name name2, m2.parentId parentId2, m2.path path2 FROM menu m1 LEFT JOIN menu m2 ON m1.id = m2.parentId LEFT JOIN menu_role mr ON mr.mid = m2.id LEFT JOIN hr_role hrr ON mr.rid = hrr.rid WHERE hrr.hrid = #{hrid} AND m2.enabled = TRUE ORDER BY m1.id, m2.id查询出的数据结构如下: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |